#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>


//程序替换
int main()
{
    printf("程序开始运行！\n");
    execl("/usr/bin/ls","ls","-l","-a",NULL);
    printf("程序运行完毕\n");
    return 0;
}






















//typedef void(*fun_t)();
//
//#define NUM 5
//fun_t handlers[NUM+1];
//        
//
//void DownLoad()
//{
//    printf("我是一个下载的任务\n");
//}   
//    
//void Flush()
//{       
//    printf("我是一个刷新的任务\n");
//}       
//        
//void Log()  
//{           
//    printf("我是一个记录日志的任务\n");
//}       
//        
////注册  
//void registerHandler(fun_t h[],fun_t f)
//{
//    int i = 0;
//    while(i < NUM)
//    {
//        if(h[i] == NULL)break;
//        i++;
//    }
//    if(i == NUM) return;
//    h[i] = f;
//    h[i+1] =NULL;   
//}
//
//int main()
//{
//    registerHandler(handlers,DownLoad);
//    registerHandler(handlers,Flush);
//    registerHandler(handlers,Log);
//    pid_t id = fork();
//    //printf("%s",handlers[0]);   
//    if(id == 0)
//    {
//        //子进程
//        int cnt = 3;
//        while(1)
//        {
//            printf("我是一个子进程, pid: %d, ppid: %d\n",getpid(),getppid());
//            sleep(1);
//            cnt--;
//        }
//        //int a = 10 / 0;
//        exit(1);
//    }
//    else
//    {
//        //父进程，非阻塞等待
//        while(1)
//        {
//            int status = 0;
//            pid_t rid = waitpid(id,&status,WNOHANG);
//            if(rid == 0)
//            {
//                int i;
//                for(i = 0; handlers[i]; i++)
//                {
//                    handlers[i]();
//                }
//                //printf("子进程没有退出\n");
//            }
//            else if(rid < 0)
//            {
//                printf("等待失败\n");
//                break;
//            }
//            else
//            {  
//                printf("wait success, ird: %d, exit code: %d, signal: %d\n",rid,(status>>8)&0xFF,status&0x7F);
//                break;
//            }
//            sleep(1);
//        }
//    }
//
//
//
//
//    
//    //父进程,阻塞等待
//    //pid_t rid = wait(NULL);
//    //int status = 0;
//    //pid_t rid = waitpid(id,&status ,0);
//    //if(rid > 0)
//    //{
//    //    //printf("wait success, ird: %d, exit code: %d, signal: %d\n",rid,(status>>8)&0xFF,status&0x7F);
//    //    printf("wait success, ird: %d, exit code: %d, signal: %d\n",rid,WEXITSTATUS(status),status&0x7F);
//    //}
//    //else
//    //{
//    //    printf("%d : %s\n",errno,strerror(errno));
//    //}
//    //printf("进程休眠\n");
//    //sleep(1);
//    //return 0;
//}
//
////void fun()
////{
////    printf("fun()\n");
////    //exit(40);
////    _exit(20);
////    printf("hello bit\n");
////}
////int main()
////{
////    //fun();
////    printf("main!");
////    sleep(2);
////    //exit(40);
////    _exit(40);
////    return 0;
////    //int i = 0;
////    //for(;i < 200; i++)
////    //{
////    //    printf("%d->%s\n",i,strerror(i));
////    //}    
////   // return errno;
////}
